<?php
//公共函数库
/**
 * 层级关系数组的合并，并加上html标识前缀
 * @param array $data
 * @param int $pid
 * @param string $html
 * @param int $level
 * @return array
 */
function treeLevel(array $data, int $pid = 0, string $html = '--', int $level = 0)
{
    static $arr = [];
    foreach ($data as $val) {
        if ($pid == $val['pid']) {
            $val['html'] = str_repeat($html, $level * 2);
            $val['level'] = $level + 1;
            $arr[] = $val;
            treeLevel($data, $val['id'], $html, $val['level']);
        }
    }
    return $arr;
}

/**
 * 递归成多维数组
 * @param array $data
 * @param int $pid
 * @return array
 */

function subTree(array $data, int $pid = 0)
{
    $arr = [];
    foreach ($data as $item) {
        if ($pid == $item['pid']) {
            $item['sub'] = subTree($data, $item['id']);
            $arr[] = $item;
        }
    }
    return $arr;
}

function subTreeName(array $data, int $pid = 0) {
    $arr = [];
    foreach ($data as $item) {
        if ($pid == $item['pid']) {
            $item['sub'] = subTree($data, $item['id']);
            $arr[$item['field_name']] = $item;
        }
    }
    return $arr;
}

/**
 * 发起网络请求
 * @param string $url
 * @param $data
 * @return bool|string
 */
function http_request(string $url, $data = []) {
    $ret = '';
    // 1、初始化
    $ch = curl_init();
    // 2、相关配置
    # 设置请求的URL地址
    curl_setopt($ch, CURLOPT_URL, $url);
    # 设置一下执行成功后不直接返回到客户端
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    # 设置超时时间  单位是秒
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    # 不进行证书的检测
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    # 伪造一个请求的浏览器型号
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3780.0 Safari/537.36');
    // 表示有请求体，是POST的提交
    if (!empty($data)) {
        # 指明是一个POST请求
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    }
    // 3、执行
    $ret = curl_exec($ch);
    # 请求的错误码 为0表示请求正确，大于0则表求请求失败的
    if (curl_errno($ch) > 0) {
        echo curl_error($ch);
        exit;
    }
    // 4、关闭请求资源
    curl_close($ch);
    return $ret;
}